
"""
文件操作
"""

# 1. 使用 open(path, ch) 打开文件
#   path 表示路径, ch 表示打开方式.
#   'r' 表示 read, 按照读方式打开.
#   'w' 表示 write, 按照写方式打开.
#   'a' 表示 append, 把内容写到原有文件的末尾.

file = open('d:/Python/text.txt', 'r')     # 返回值是一个文件对象.
print(file)
print(type(file))
# 如果打开的文件不存在, 以读的形式打开, 就会抛异常
# file = open('d:/Python/text2.txt', 'r')     # 返回值是一个文件对象.


# 2. 关闭文件
file.close()


# 3. 写文件
#   (1). 直接写打开
file = open('d:/Python/text.txt', 'w')
# 会先清空 text.txt 文件中的内容再写入(覆盖旧的内容)
file.write('hello world\n')
file.close()

#   (2). 追加写
#   把内容写到原有文件的末尾.
file = open('d:/Python/text.txt', 'a')
file.write('张玉婷我爱你')
file.close()


# 4. 读文件
#   (1). 使用 read 方法, 参数表示读取几个字符     # encoding 是关键字参数, 设置字符编码
file = open('d:/Python/text.txt', 'r', encoding='ansi')
result = file.read(20)
print(result)
file.close()

#   (2). 按行读取[更常用]
#   最简单的方式就是 for 循环
file = open('d:/Python/text.txt', 'r', encoding='ansi')
for line in file:
    # 第i次循环, line 变量对应的就是i行
    print(f"line = {line}", end='')  # end 这个关键字参数是为了让print不会自动换行.
file.close()
print("\n--------------------------------------------")

#   (3). 使用 readLines 方法直接把整个文件内容都读出来, 按照行组织到一个列表里
file = open('d:/Python/text.txt', 'r', encoding='ansi')
lines = file.readlines()
print(lines)
# 列表的遍历
for line in lines:
    print(line, end='')
print()
file.close()


# 上下文管理器, with 对应的代码块执行结束, 就会自动执行 file 的 close, 避免资源泄露
def func():
    with open('d:/Python/text.txt', 'r', encoding='ansi') as theTile:
        # 进行逻辑处理代码
        my_lines = theTile.readlines()
        print(my_lines)
        # file.close()


func()
